package PTA.ch06.ex01;

import java.util.Arrays;
import java.util.LinkedList;

 interface IntegerStack {

    public Integer push(Integer item); //如item为null，则不入栈直接返回null。否则直接入栈，然后返回item。
    public Integer pop();              //出栈，如栈为空，则返回null。
    public Integer peek();             //获得栈顶元素，如栈顶为空，则返回null。注意：不要出栈
    public boolean empty();           //如过栈为空返回true
    public int size();                //返回栈中元素数量

}
 class ArrayListIntegerStack implements IntegerStack {
     LinkedList sc = new LinkedList();//创建 LinkedList  对象

     @Override
     //如item为null，则不入栈直接返回null。否则直接入栈，然后返回item。
     public Integer push(Integer item) {
         if (item == null) {
             return null;
         }
         sc.push(item);//push 表示将括号内 推送到 对应的栈内
         return item;
     }

     //出栈，如栈为空，则返回null。
     @Override
     public Integer pop() {
         if (sc.size() == 0) {//判断 栈内是否为空，空表示 对象的长度为0
             return null;
         }
         return (Integer) sc.pop();//出栈

     }

     //获得栈顶元素，如栈顶为空，则返回null。注意：不要出栈
     @Override
     public Integer peek() {
         if (sc.size() == 0) {//判断 栈 是否为空
             return null;
         }
         return (Integer) sc.peek();//返回 栈顶（栈内的第一个元素）即 栈顶元素

     }

     //如过栈为空返回true
     @Override
     public boolean empty() {

         return sc.isEmpty();//isEmpt  返回值 本身就是 true 和 false
         //为空则返回true
     }

     //返回栈中元素数量
     @Override
     public int size() {

         return sc.size();//返回集合的长度
     }

     @Override
     public String toString() {

        return Arrays.toString(new LinkedList[]{sc});
     }
 }